// pages/safety-care/safety-report/safety-report.js
// 一键报平安页面逻辑
Page({
  /**
   * 页面的初始数据
   */
  data: {
    // 用户信息
    userId: '',
    
    // 报平安状态
    reportStatus: false, // 今日是否已报平安
    isSubmitting: false, // 是否正在提交
    
    // 时间信息
    currentTime: '',
    currentDate: '',
    lastReportTime: '',
    
    // 健康状态选择
    selectedHealth: 'good', // good, normal, unwell
    
    // 备注信息
    noteText: '',
    
    // 联系方式
    communityPhone: '400-123-4567',
    
    // 历史记录
    reportHistory: []
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.updateCurrentTime();
    this.generateUserId(); // 生成或获取用户ID
    this.checkTodayReportStatusFromServer(); // 从服务器检查状态
    this.loadReportHistoryFromServer(); // 从服务器加载历史记录
    
    // 每分钟更新一次时间
    this.timeInterval = setInterval(() => {
      this.updateCurrentTime();
    }, 60000);
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    // 每次显示页面时检查报平安状态
    this.checkTodayReportStatusFromServer();
  },

  /**
   * 生成或获取用户ID
   */
  generateUserId: function() {
    let userId = wx.getStorageSync('userId');
    if (!userId) {
      // 生成简单的用户ID (实际项目中应该从登录获取)
      userId = 'user_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);
      wx.setStorageSync('userId', userId);
    }
    this.setData({
      userId: userId
    });
  },

  /**
   * 从服务器检查今日报平安状态
   */
  checkTodayReportStatusFromServer: function() {
    const userId = this.data.userId;
    if (!userId) {
      this.checkTodayReportStatus();
      return;
    }

    wx.request({
      url: `http://localhost:3002/api/safety-report/today/${userId}`,
      method: 'GET',
      timeout: 5000, // 5秒超时
      success: (res) => {
        if (res.data && res.data.success && res.data.data) {
          const { hasReported, report } = res.data.data;
          this.setData({
            reportStatus: hasReported,
            lastReportTime: report ? report.time : ''
          });
        } else {
          // 服务器响应格式不正确，回退到本地存储
          this.checkTodayReportStatus();
        }
      },
      fail: (err) => {
        console.error('检查今日报平安状态失败:', err);
        // 如果服务器请求失败，回退到本地存储检查
        this.checkTodayReportStatus();
      }
    });
  },

  /**
   * 从服务器加载报平安历史记录
   */
  loadReportHistoryFromServer: function() {
    const userId = this.data.userId;
    if (!userId) {
      this.loadReportHistory();
      return;
    }

    wx.request({
      url: `http://localhost:3002/api/safety-report/history/${userId}`,
      method: 'GET',
      timeout: 5000, // 5秒超时
      data: {
        limit: 7 // 只获取最近7天
      },
      success: (res) => {
        if (res.data && res.data.success && res.data.data) {
          const history = res.data.data.map(item => ({
            id: item.id,
            date: item.date,
            time: item.time,
            status: this.getHealthStatusText(item.health_status)
          }));
          this.setData({
            reportHistory: history
          });
        } else {
          // 服务器响应格式不正确，回退到本地存储
          this.loadReportHistory();
        }
      },
      fail: (err) => {
        console.error('加载历史记录失败:', err);
        // 如果服务器请求失败，回退到本地存储
        this.loadReportHistory();
      }
    });
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    // 清除定时器
    if (this.timeInterval) {
      clearInterval(this.timeInterval);
    }
  },

  /**
   * 更新当前时间
   */
  updateCurrentTime: function() {
    const now = new Date();
    const timeStr = now.toLocaleTimeString('zh-CN', {
      hour12: false,
      hour: '2-digit',
      minute: '2-digit'
    });
    const dateStr = now.toLocaleDateString('zh-CN', {
      year: 'numeric',
      month: 'long',
      day: 'numeric',
      weekday: 'long'
    });
    
    this.setData({
      currentTime: timeStr,
      currentDate: dateStr
    });
  },

  /**
   * 检查今日报平安状态
   */
  checkTodayReportStatus: function() {
    const today = new Date().toLocaleDateString('zh-CN');
    const reportKey = `safety_report_${today}`;
    
    // 从本地存储检查今日是否已报平安
    const todayReport = wx.getStorageSync(reportKey);
    if (todayReport) {
      this.setData({
        reportStatus: true,
        lastReportTime: todayReport.time
      });
    } else {
      this.setData({
        reportStatus: false,
        lastReportTime: ''
      });
    }
  },

  /**
   * 加载报平安历史记录
   */
  loadReportHistory: function() {
    try {
      const history = wx.getStorageSync('safety_report_history') || [];
      // 只显示最近7天的记录
      const recentHistory = history.slice(0, 7);
      this.setData({
        reportHistory: recentHistory
      });
    } catch (error) {
      console.error('加载历史记录失败:', error);
    }
  },

  /**
   * 选择健康状态
   */
  selectHealth: function(e) {
    const health = e.currentTarget.dataset.health;
    this.setData({
      selectedHealth: health
    });
  },

  /**
   * 备注输入
   */
  onNoteInput: function(e) {
    this.setData({
      noteText: e.detail.value
    });
  },

  /**
   * 报平安主功能
   */
  reportSafety: function() {
    if (this.data.reportStatus) {
      wx.showToast({
        title: '今日已报平安',
        icon: 'success'
      });
      return;
    }

    if (this.data.isSubmitting) {
      return;
    }

    this.setData({
      isSubmitting: true
    });

    // 准备提交数据
    const reportData = {
      date: new Date().toLocaleDateString('zh-CN'),
      time: new Date().toLocaleTimeString('zh-CN'),
      health: this.data.selectedHealth,
      note: this.data.noteText,
      timestamp: Date.now()
    };

    // 模拟API调用延迟
    setTimeout(() => {
      this.submitSafetyReport(reportData);
    }, 1500);
  },

  /**
   * 提交报平安数据
   */
  submitSafetyReport: async function(reportData) {
    try {
      // 首先保存到本地存储（确保数据不丢失）
      const today = new Date().toLocaleDateString('zh-CN');
      const reportKey = `safety_report_${today}`;
      wx.setStorageSync(reportKey, reportData);

      // 更新历史记录
      this.updateReportHistory(reportData);

      // 更新页面状态
      this.setData({
        reportStatus: true,
        lastReportTime: reportData.time,
        isSubmitting: false,
        noteText: '', // 清空备注
        selectedHealth: 'good' // 重置健康状态
      });

      // 显示成功提示
      wx.showToast({
        title: '报平安成功！',
        icon: 'success',
        duration: 2000
      });

      // 震动反馈
      wx.vibrateShort();

      // 尝试发送到服务器（后台任务，失败不影响用户体验）
      try {
        await this.sendToServer(reportData);
        console.log('数据已同步到服务器');
      } catch (serverError) {
        console.log('服务器同步失败，数据已保存到本地:', serverError.message);
        // 服务器失败不影响用户体验，数据已在本地保存
      }

    } catch (error) {
      console.error('报平安失败:', error);
      this.setData({
        isSubmitting: false
      });

      wx.showToast({
        title: '报平安失败，请重试',
        icon: 'none',
        duration: 3000
      });
    }
  },

  /**
   * 更新历史记录
   */
  updateReportHistory: function(reportData) {
    try {
      let history = wx.getStorageSync('safety_report_history') || [];
      
      // 添加新记录到开头
      const historyItem = {
        id: reportData.timestamp,
        date: reportData.date,
        time: reportData.time,
        status: this.getHealthStatusText(reportData.health)
      };
      
      history.unshift(historyItem);
      
      // 只保留最近30天的记录
      history = history.slice(0, 30);
      
      wx.setStorageSync('safety_report_history', history);
      
      // 更新页面显示
      this.setData({
        reportHistory: history.slice(0, 7) // 只显示最近7天
      });
    } catch (error) {
      console.error('更新历史记录失败:', error);
    }
  },

  /**
   * 获取健康状态文本
   */
  getHealthStatusText: function(health) {
    const statusMap = {
      'good': '身体健康',
      'normal': '状态一般',
      'unwell': '身体不适'
    };
    return statusMap[health] || '身体健康';
  },

  /**
   * 发送数据到服务器
   */
  sendToServer: function(reportData) {
    return new Promise((resolve, reject) => {
      wx.request({
        url: 'http://localhost:3002/api/safety-report',
        method: 'POST',
        timeout: 8000, // 8秒超时
        data: {
          userId: this.data.userId,
          date: reportData.date,
          time: reportData.time,
          health: reportData.health,
          note: reportData.note,
          timestamp: reportData.timestamp
        },
        header: {
          'content-type': 'application/json'
        },
        success: (res) => {
          if (res.data && res.data.success) {
            console.log('报平安数据已发送到服务器:', res.data);
            resolve(res.data);
          } else {
            console.error('服务器返回错误:', res.data?.message || '未知错误');
            reject(new Error(res.data?.message || '服务器响应异常'));
          }
        },
        fail: (err) => {
          console.error('发送到服务器失败:', err);
          reject(new Error(err.errMsg || '网络请求失败'));
        }
      });
    });
  },

  /**
   * 拨打电话
   */
  makeCall: function(e) {
    const phone = e.currentTarget.dataset.phone;
    if (!phone) {
      wx.showToast({
        title: '电话号码不可用',
        icon: 'none'
      });
      return;
    }

    wx.showModal({
      title: '拨打电话',
      content: `确定要拨打 ${phone} 吗？`,
      confirmText: '拨打',
      cancelText: '取消',
      success: (res) => {
        if (res.confirm) {
          wx.makePhoneCall({
            phoneNumber: phone,
            success: () => {
              console.log('拨打电话成功');
            },
            fail: (err) => {
              console.error('拨打电话失败:', err);
              wx.showToast({
                title: '拨打失败',
                icon: 'none'
              });
            }
          });
        }
      }
    });
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    this.updateCurrentTime();
    this.checkTodayReportStatusFromServer();
    this.loadReportHistoryFromServer();
    wx.stopPullDownRefresh();
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
    return {
      title: '一键报平安 - 让家人安心',
      path: '/pages/safety-care/safety-report/safety-report',
      imageUrl: '/img/share-safety.png' // 可以添加分享图片
    };
  }
});
